package com.base.common.enums;

/**
 * 异常类，需集成ErrorEnum，重写getCode、getCodeMsg、getDesc
 * 错误类型划分：业务阻断型异常、业务非阻断型异常、阻断型异常
 * <p>
 * 注：业务系统正常只定义 业务阻断型异常、业务非阻断型异常
 * <p>
 * 错误定义：统一前缀，序号递增
 * 错误类型_业务系统_序号(从1开始，四位，不足补0)
 * <p>
 * eg： 商品系统
 * BLOCK_GOODS_API_0001、ALERT_GOODS_API_0001、SYSTEM_ERROR_0001
 * <p>
 * BLOCK_GOODS_MSG_0001、ALERT_GOODS_MSG_0001
 *
 * @author Admin
 * @date 2021/04/12 AM10:15
 */
public enum DemoErrorEnum implements ErrorEnum {
    /**
     * 业务阻断型异常，不可操作
     */
    BLOCK_BUSINESS_0001("BLOCK_BUSINESS_0001", "业务阻断型异常，不可操作", "业务校验类，需要提示语，但是不需要操作。"),
    /**
     * 业务非阻断型异常，可后续操作
     */
    ALERT_BUSINESS_0001("ALERT_BUSINESS_0001", "业务非阻断型异常，可后续操作", "业务校验类分支（例如数据状态不一致型操作异常），需要提示，同时需要做后续操作。"),
    /**
     * 系统（非业务）阻断型异常，提示语统一优化。
     */
    SYSTEM_ERROR_0001("SYSTEM_ERROR_0001", "系统（非业务）阻断型异常，提示语统一优化 (运行时异常、中间件异常、调用第三方异常等等)。");

    /**
     * 错误码
     */
    private final String code;

    /**
     * 错误码 （前台回显）
     */
    private final String codeMsg;

    /**
     * 详细描述
     */
    private final String desc;

    DemoErrorEnum(String code, String codeMsg, String desc) {
        this.code = code;
        this.codeMsg = codeMsg;
        this.desc = desc;
    }

    DemoErrorEnum(String code, String codeMsg) {
        this.code = code;
        this.codeMsg = codeMsg;
        this.desc = null;
    }

    /**
     * 获取Code
     *
     * @return code
     */
    @Override
    public String getCode() {
        return this.code;
    }

    /**
     * 获取CodeMsg
     *
     * @return msg
     */
    @Override
    public String getCodeMsg() {
        return this.codeMsg;
    }

    /**
     * 获取Desc
     *
     * @return desc
     */
    @Override
    public String getDesc() {
        return this.desc;
    }
}
